﻿

using System.IO;
using UnityEngine;
public class CopyFolder{

    //复制指定文件夹中的所有文件夹(或文件) 到指定文件夹
    //递归方法 CopyFolder(原文件夹路径，目标文件夹路径）
    public static void Copy(string strFromPath, string strToPath)
    {
        //如果源文件夹不存在，则创建
        if (!Directory.Exists(strFromPath))
        {
            Directory.CreateDirectory(strFromPath);
        }
        //取得要拷贝的文件夹名
        string strFolderName = strFromPath.Substring(strFromPath.LastIndexOf("/") +
        1, strFromPath.Length - strFromPath.LastIndexOf("/") - 1);
        //如果目标文件夹中没有源文件夹则在目标文件夹中创建源文件夹
        if (Directory.Exists(strToPath + "/" + strFolderName))
        {
            Directory.Delete(strToPath + "/" + strFolderName,true);
        }
        if (!Directory.Exists(strToPath + "/" + strFolderName))
        {
            Directory.CreateDirectory(strToPath + "/" + strFolderName);
        }
        //创建数组保存源文件夹下的文件名
        string[] strFiles = Directory.GetFiles(strFromPath);
        //循环拷贝文件
        for (int i = 0; i < strFiles.Length; i++)
        {
            //取得拷贝的文件名，只取文件名，地址截掉。
            string strFileName = strFiles[i].Substring(strFiles[i].LastIndexOf("\\") + 1, strFiles[i].Length - strFiles[i].LastIndexOf("\\") - 1);
            if (strFileName.IndexOf(".meta") > -1) continue;
            //开始拷贝文件,true表示覆盖同名文件
            File.Copy(strFiles[i], strToPath + "/" + strFolderName + "/" + strFileName, true);
        }
        //创建DirectoryInfo实例
        DirectoryInfo dirInfo = new DirectoryInfo(strFromPath);
        //取得源文件夹下的所有子文件夹名称
        DirectoryInfo[] ZiPath = dirInfo.GetDirectories();
        for (int j = 0; j < ZiPath.Length; j++)
        {
            string ziPathName = ZiPath[j].ToString();
            ziPathName = ziPathName.Substring(ziPathName.LastIndexOf("\\") + 1, ziPathName.Length - ziPathName.LastIndexOf("\\") - 1);
            //获取所有子文件夹路径
            string strZiPath = strFromPath + "/" + ziPathName;
            //把得到的子文件夹当成新的源文件夹，从头开始新一轮的拷贝
            Copy(strZiPath, strToPath + "/" + strFolderName);
        }
    }
}
